﻿using Moq;
using Soundteller.Audio.Repositories.Interfaces;
using Soundteller.AudioVisual.Model;
using Soundteller.AudioVisual.Repositories.Interfaces;
using Soundteller.AudioVisual.Services;
using Soundteller.AudioVisual.Services.Interfaces;
using Soundteller.Common.Tests;

namespace Soundteller.AudioVisual.Tests.Unit.Services.PadToucherSpecifications
{
    public abstract class PadToucherTestBase : TestBase
    {
        protected IPadToucher PadToucher { get; private set; }
        protected Mock<IPadRepository> PadRepository { get; private set; }
        protected Mock<ISoundBufferRepository> SoundBufferRepository { get; private set; }
        protected abstract PadTouchArguments Arguments { get; }

        protected override void Arrange()
        {
            PadRepository = new Mock<IPadRepository>();
            SoundBufferRepository = new Mock<ISoundBufferRepository>();

            PadToucher = new PadToucher(PadRepository.Object, SoundBufferRepository.Object);
        }

        protected override void Act()
        {
            PadToucher.Touch(Arguments);
        }
    }
}
